/*
  验证码
  题目描述
    维吉尼亚密码（又译维热纳尔密码）是使用一系列凯撒密码组成密码字母表的加密算法，
    属于多表密码的一种简单形式，以简单易用而著称。

    在密码学中，我们称需要加密的信息为明文，用 M 表示；
    称加密后的信息为密文，用 C 表示；
    而密钥是一种参数，是将明文转换为密文或将密文转换为明文的算法中输入的数据，记为 k。

    在维吉尼亚密码中，密钥 k 是一个字母串，k = k1k2…kn。
    当明文 M = m1m2 … mn时，得到的密文 C = c1c2…cn，其中 ci = mi®ki。

    维吉尼亚加密在操作时需要注意：
      1. ®运算忽略参与运算的字母的大小写，并保持字母在明文 M 中的大小写形式；
      2. 当明文 M 的长度大于密钥 k 的长度时，将密钥 k 重复使用。
    例如，明文 M = Helloworld，密钥 k = abc 时，密文 C = Hfnlpyosnd。
        明文  H  e  l  l  o  w  o  r  l  d
        密钥  a  b  c  a  b  c  a  b  c  a
        密文  H  f  n  l  p  y  o  s  n  d
  输入
    共 2 行。
    第一行为一个字符串，表示密钥 k，长度不超过 100，其中仅包含大小写字母。
    第二行为一个字符串，表示经加密后的密文，长度不超过 1000，其中仅包含大小写字母。
  输出
    共 1 行，一个字符串，表示输入密钥和密文所对应的明文。
  样例输入
    CompleteVictory
    Yvqgpxaimmklongnzfwpvxmniytm
  样例输出
    Wherethereisawillthereisaway
  提示
    对于 100% 的数据，输入的密钥的长度不超过 100，输入的密文的长度不超过 1000，且都仅包含英文字母。
*/

#include <bits/stdc++.h>

using namespace std;

int main() {
    string s1;
    string s2;
    queue <char> que; // 用来存放密钥

    cin >> s1;
    cin >> s2;

    for (int i = 0; i < s1.size(); i++) {
        que.push(s1[i]);
    }

    for (int i = 0; i < s2.size(); i++) {
        int k;
        char a2 = que.front();
        if (a2 >= 'A' && a2 <= 'Z') {
            k = a2 - 'A';
        } else {
            k = a2 - 'a';
        }

        char tmp = s2[i] - k;
        if (s2[i] >= 'A' && s2[i] <= 'Z') {
            // 注意: 当按照解密计算式得到的字符小于 'A' 时, 需要从 'Z' 开始向小于 'Z' 的方向查找!
            if (s2[i] - k < 'A') {
                tmp = 'Z' - ('A' - (s2[i] - k)) + 1;
            }
        } else {
            // 注意: 当按照解密计算式得到的字符小于 'a' 时, 需要从 'z' 开始向小于 'z' 的方向查找!
            if (s2[i] - k < 'a') {
                tmp = 'z' - ('a' - (s2[i] - k)) + 1;
            }
        }

        que.pop();
        que.push(a2);

        cout << tmp;
    }

    return 0;
}